package com.tlx.design.proxy.jdk;

import sun.misc.ProxyGenerator;

import java.io.FileOutputStream;

public class TestFindLove {
    public static void main(String[] args) {
        //new XiaoXingXing().findLove();
        try {
            Person proxy = (Person) new MeiPo().getInstance(new XiaoXingXing());
            System.out.println(proxy.getClass());
            proxy.findLove();

            //原理：
            //1.拿到被代理对象的引用，然后获取它的接口
            //2.JDK代理重新生成一个类，同时实现我们给的代理对象所实现的接口
            //3.把被代理对象的引用也拿到了
            //4.重新动态生成一个class字节码
            //5.然后编译

            //获取字节码内容
            byte[] data = ProxyGenerator.generateProxyClass("$Proxy0", new Class[]{Person.class});
            FileOutputStream fos = new FileOutputStream("basic\\src\\main\\java\\com\\tlx\\design\\proxy\\jdk\\$Proxy0.class");
            fos.write(data);
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
